1 package org.apache.maven.surefire.testng.utils;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25 import org.apache.maven.surefire.group.match.AndGroupMatcher;
26 import org.apache.maven.surefire.group.match.GroupMatcher;
27 import org.apache.maven.surefire.group.match.InverseGroupMatcher;
28 import org.apache.maven.surefire.group.parse.GroupMatcherParser;
29 import org.apache.maven.surefire.group.parse.ParseException;
30
31 import org.testng.IMethodSelector;
32 import org.testng.IMethodSelectorContext;
33 import org.testng.ITestNGMethod;
34
35
36
37
38
39 public class GroupMatcherMethodSelector
40 implements IMethodSelector
41 {
42
43 private static final long serialVersionUID = 1L;
44
45 private static GroupMatcher matcher;
46
47 private Map<ITestNGMethod, Boolean> answers = new HashMap<ITestNGMethod, Boolean>();
48
49 public boolean includeMethod( IMethodSelectorContext context, ITestNGMethod method, boolean isTestMethod )
50 {
51
52 Boolean result = (Boolean) answers.get( method );
53 if ( result != null )
54 {
55
56 return result;
57 }
58
59 if ( matcher == null )
60 {
61
62 return true;
63 }
64
65 String[] groups = method.getGroups();
66 result = Boolean.valueOf( matcher.enabled( groups ) );
67
68 answers.put( method, result );
69
70
71 return result;
72 }
73
74 public void setTestMethods( List<ITestNGMethod> testMethods )
75 {
76 }
77
78 public static void setGroups( String groups, String excludedGroups )
79 {
80
81
82 try
83 {
84 AndGroupMatcher matcher = new AndGroupMatcher();
85 GroupMatcher in = null;
86 if ( groups != null && groups.trim().length() > 0 )
87 {
88 in = new GroupMatcherParser( groups ).parse();
89 }
90
91 if ( in != null )
92 {
93 matcher.addMatcher( in );
94 }
95
96 GroupMatcher ex = null;
97 if ( excludedGroups != null && excludedGroups.trim().length() > 0 )
98 {
99 ex = new GroupMatcherParser( excludedGroups ).parse();
100 }
101
102 if ( ex != null )
103 {
104 matcher.addMatcher( new InverseGroupMatcher( ex ) );
105 }
106
107 if ( in != null || ex != null )
108 {
109
110 GroupMatcherMethodSelector.matcher = matcher;
111 }
112 }
113 catch ( ParseException e )
114 {
115 throw new IllegalArgumentException(
116 "Cannot parse group includes/excludes expression(s):\nIncludes: " + groups + "\nExcludes: "
117 + excludedGroups, e );
118 }
119 }
120
121 public static void setGroupMatcher( GroupMatcher matcher )
122 {
123 GroupMatcherMethodSelector.matcher = matcher;
124 }
125
126 }